
% Created 2011-10-27 do 16:51
\documentclass[a4paper, 11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fixltx2e}
\usepackage{graphicx}
\usepackage{longtable}
\usepackage{float}
\usepackage{wrapfig}
\usepackage{soul}
\usepackage{textcomp}
\usepackage{listings}
\usepackage{color}
%\usepackage{marvosym}
%\usepackage{wasysym}
%\usepackage{latexsym}
%\usepackage{amssymb}
\usepackage{mathtools}
\usepackage{hyperref}
\usepackage{placeins}
\usepackage{pict2e}
\usepackage{subfig}
%\usepackage{cmbright}
\usepackage[dutch]{babel}
\usepackage[a4paper,margin=2.5cm]{geometry}
 \hyphenpenalty=5000
\tolerance=1000
\providecommand{\alert}[1]{\textbf{#1}}
\newcommand{\code}[1]{\textbf{\texttt{#1}}}
\newfloat{MATLAB code}{h}{}
\usepackage{tikz,pgfplots}

\pgfplotsset{compat=newest}
\pgfplotsset{plot coordinates/math parser=false}

\title{Technisch Wetenschappelijke Software: \\ Huistaak 9}
\author{Roel Matthysen \\ s0202264 \\ 1e Master Wiskundige Ingenieurstechnieken}
\date{\today}

\newlength\figureheight
\newlength\figurewidth
\setlength\figureheight{2cm}
\setlength\figurewidth{12cm}


\begin{document}

\maketitle

\section*{Mandelbrot}
In deze sectie wordt de uitvoeringstijd van de verschillende revisies besproken voor \code{steps}$=100,250,500,1000$. De evolutie van de uitvoeringstijd wordt getoond in figuur \ref{fig:times}. Uit deze figuur blijkt dat de uitvoeringstijd zoals verwacht logaritmisch toeneemt. In figuur \ref{fig:bargraph} wordt dan het aandeel van de verschillende revisies in de totale uitvoertijd weergegeven. Uit deze figuur blijkt dat de verwachte verbetering in uitvoeringstijd per revisie inderdaad aanwezig is, behalve bij de overgang 1-2 en 3-4. Deze revisies komen overeen met de vervanging \code{i=1i}, en het omwisselen van de lusvolgorde. Ook blijkt dat met het vergroten van \code{steps} de verbeteringen die gemaakt zijn in 7,8 en 9 een deel van hun waarde verliezen. Deze verbeteringen komen overeen met het vectoriseren van de bewerking in de lus \code{r=1:maxiter}. Een mogelijke verklaring is dat altijd maar meer geheugen gebruikt wordt in deze bewerkingen en dat er cache-problemen opduiken die de uitvoeringstijd verhogen. Uit de figuur blijkt voorts nog dat revisie 99 duidelijk de kortste uitvoeringstijd heeft. Het feit dat dit niet naar voren komt bij het profilen heeft te maken met de verschillende lussen, en de overhead van de profiler bij de uitvoering van iedere lijn.
\begin{figure}[htp]
\centering
\subfloat[Lineair]{
\includegraphics{img/timeslin.eps}}
\subfloat[Logaritmisch]{\includegraphics{img/timeslog.eps}}
\caption{De uitvoeringstijd van de verschillende revisies voor oplopende \code{steps} op lineaire en logaritmische schaal.}
\label{fig:times}
\end{figure}

\begin{figure}[h]
\centering
\includegraphics{img/bargraph.eps}
\caption{}
\label{fig:bargraph}
\end{figure}

\section*{JIT accelerator}
In deze sectie worden de invloeden van de Just In Time accelerator en andere optimalisaties bij het interpreteren onderzocht in MATLAB en Octave. Om deze effecten na te gaan worden drie experimenten gebruikt waarbij telkens bewerkingen uit de lus gehaald kunnen worden.
\begin{description}
\item[Experiment 1]\hfill
\lstset{language=MATLAB,keywordstyle=\color{blue},label=DescriptiveLabel}
\begin{lstlisting}
for i=1:n; a(i) = sqrt(rand) * a(i); end;
\end{lstlisting}
\begin{itemize}
\item Verbetering 1: \code{rand} uit de lus halen en voor $n$ elementen berekenen.
\item Verbetering 2: \code{sqrt} uit de lus halen en toepassen op \code{rand(n,1)}.
\item Verbetering 3: De vermenigvuldiging vectoriseren.
\end{itemize}
\item[Experiment 2]\hfill
\lstset{language=MATLAB,keywordstyle=\color{blue},label=DescriptiveLabel}
\begin{lstlisting}
for i=1:n; a(i) = sqrt(i) * a(i); end;
\end{lstlisting}
\begin{itemize}
\item Verbetering 1: \code{sqrt(i)} uit de lus vectoriseren tot \code{sqrt(1:n)}.
\item Verbetering 2: De vermenigvuldiging vectoriseren.
\end{itemize}
\item[Experiment 3]\hfill
\lstset{language=MATLAB,keywordstyle=\color{blue},label=DescriptiveLabel}
\begin{lstlisting}
for i=1:n; a(i) = sqrt(2) * a(i); end;
\end{lstlisting}
\begin{itemize}
\item Verbetering 1: \code{sqrt(2)} slechts 1 keer berekenen voor de lus.
\item Verbetering 2: De vermenigvuldiging vectoriseren.
\end{itemize}
\end{description}
De resultaten voor de verschillende experimenten en verbeteringen worden getoond in figuur \ref{fig:matlab} voor MATLAB en \ref{fig:octave} voor Octave. Eerst moet opgemerkt worden dat de uitvoeringstijd voor de test in MATLAB 0.14 sec bedroeg, en in Octave 0.83 sec voor een vector $a$ van grootte 10.000. Verder kunnen uit de figuur een paar observaties gemaakt worden uit de verbeteringen. Zo blijkt dat de verbetering waarbij de \code{sqrt} uit de lus wordt gehaald in MATLAB bijna geen invloed heeft. Dit kan twee mogelijke oorzaken hebben:
\begin{itemize}
\item De berekening is goedkoop en de uitvoeringstijd in de lus tov de lusoverhead is verwaarloosbaar
\item MATLAB ziet deze berekening en houdt er rekening mee.
\end{itemize}
Een mogelijk argument voor de tweede oorzaak is dat deze verbetering in Octave wel degelijk een merkbaar effect heeft. Een argument tegen is dat de berekeningen met of zonder JIT acceleratie zeer weinig verschilen. (\code{feature accel on/off}). 
\newline
De berekening van \code{rand} uit de lus halen heeft een duidelijk verbeterend effect, waaruit afgeleid kan worden dat MATLAB en Octave deze niet uit zichzelf uitvoeren. Dit is nog meer het geval voor de vectorisatie, die een verbetering van een factor 100 of meer teweeg brengt.
\begin{figure}[htp]
\centering
\subfloat[MATLAB]{
\includegraphics{img/matlab.eps}\label{fig:matlab}}
\subfloat[Octave]{\includegraphics{img/octave.eps}\label{fig:octave}}
\caption{De verhouding tot het origineel voor verbeteringen op verschillende experimenten in MATLAB en Octave.}
\label{fig:times}
\end{figure}
\newline
Geschatte tijdsbesteding: ongeveer 4 uur
\end{document}


%%% Local Variables: 
%%% mode: latex
%%% TeX-master: t
%%% End: